/**
 * @description:
 * @Author: wuzhenbin
 * @CreateTime: 2025/2/15
 */
public class leetcode_543 {
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }

    public static void main(String[] args) {

    }
    private int maxDiameter = 0;  // 用于记录二叉树的最大直径
    public int diameterOfBinaryTree(TreeNode root) {
        // 从根节点开始计算
        depth(root);
        return maxDiameter;  // 返回最大直径
    }

    private int depth(TreeNode node) {
        if (node == null) {
            return 0;  // 空节点深度为 0
        }
        // 递归计算左右子树的深度
        //  左边最深
        int leftDepth = depth(node.left);
        //  右边最深
        int rightDepth = depth(node.right);
        maxDiameter = Math.max(leftDepth+rightDepth,maxDiameter);
        //因为这个函数 是每个都要取到最深的 对于直径的计算 不需要这个return来处理 注意深度要算上这个根

        return Math.max(leftDepth,rightDepth)+1;
    }


}
